In [1]:
import lasio
lasio will automatically try and import pandas
In [2]:
import os
l = lasio.read(os.path.join("..", "tests", "examples", "6038187_v1.2.las"))
In [3]:
df = l.df()
In [4]:
type(df)
Out[4]:
pandas.core.frame.DataFrame
View a snapshot of the dataframe with the head() method, which takes number of lines as an argument:
In [5]:
df.head(10)
Out[5]:
CALI
DFAR
DNEAR
GAMN
NEUT
PR
SP
COND
DEPT
0.05
49.765
4.587
3.382
NaN
NaN
NaN
NaN
NaN
0.10
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.15
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.20
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.25
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.30
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.35
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.40
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.45
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
0.50
49.765
4.587
3.382
-2324.28
NaN
115.508
-3.049
-116.998
Or look at the data at the bottom of the hole with the similar method tail():
In [6]:
df.tail(50)
Out[6]:
CALI
DFAR
DNEAR
GAMN
NEUT
PR
SP
COND
DEPT
134.15
101.408
1.628
1.404
-2324.28
128.000
115.508
-3.049
581.113
134.20
101.402
1.576
1.411
-2324.28
158.000
115.508
-3.049
580.619
134.25
101.336
1.609
1.405
-2324.28
131.000
115.508
-3.049
584.571
134.30
101.330
1.596
1.418
-2324.28
149.994
115.508
-3.049
594.695
134.35
101.336
1.630
1.417
-2324.28
139.003
115.508
-3.049
601.612
134.40
101.330
1.616
1.418
-2324.28
160.000
115.508
-3.049
607.295
134.45
101.313
1.615
1.444
-2324.28
129.000
115.508
-3.049
608.777
134.50
101.301
1.577
1.383
-2324.28
171.000
115.508
-3.049
603.343
134.55
101.289
1.600
1.368
-2324.28
138.010
115.508
-3.049
594.948
134.60
101.037
1.555
1.395
-2324.28
165.991
115.508
-3.049
584.327
134.65
100.983
1.563
1.357
-2324.28
158.000
115.508
-3.049
578.643
134.70
100.833
1.570
1.357
NaN
NaN
NaN
NaN
571.233
134.75
93.760
1.582
1.378
NaN
NaN
NaN
NaN
565.552
134.80
88.086
1.561
1.361
NaN
NaN
NaN
NaN
570.490
134.85
86.443
1.516
1.338
NaN
NaN
NaN
NaN
574.937
134.90
79.617
5.989
1.356
NaN
NaN
NaN
NaN
579.137
134.95
65.236
4.587
1.397
NaN
NaN
NaN
NaN
NaN
135.00
55.833
4.587
1.351
NaN
NaN
NaN
NaN
NaN
135.05
49.061
4.587
1.329
NaN
NaN
NaN
NaN
NaN
135.10
49.036
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.15
49.024
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.20
49.005
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.25
48.999
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.30
48.987
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.35
48.980
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.40
48.962
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.45
48.962
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.50
48.925
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.55
48.931
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.60
48.919
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.65
48.900
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.70
48.882
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.75
48.863
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.80
48.857
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.85
48.839
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.90
48.808
NaN
NaN
NaN
NaN
NaN
NaN
NaN
135.95
48.802
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.00
48.789
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.05
48.771
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.10
48.765
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.15
48.752
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.20
48.734
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.25
48.684
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.30
48.666
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.35
48.647
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.40
48.604
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.45
48.555
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.50
48.555
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.55
48.438
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.60
-56.275
NaN
NaN
NaN
NaN
NaN
NaN
NaN
Use the describe() method to return basic statistical information about the curves in the dataframe:
In [7]:
df.describe()
Out[7]:
CALI
DFAR
DNEAR
GAMN
NEUT
PR
SP
COND
count
2732.000000
2701.000000
2701.000000
2691.000000
2492.000000
2692.000000
2692.000000
2697.000000
mean
97.432002
1.767922
1.729209
-102.330033
441.600013
17940.522307
90.393464
478.670791
std
13.939547
0.480333
0.372412
630.106420
370.138208
22089.297212
26.725547
753.869866
min
-56.275000
0.725000
0.657001
-2324.280000
81.001800
115.508000
-3.049000
-116.998000
25%
101.077500
1.526000
1.535000
55.783000
158.002000
2652.470000
93.495500
200.981000
50%
101.426000
1.758000
1.785000
74.376900
256.501500
2709.345000
99.994000
266.435000
75%
101.582000
1.993000
1.948000
88.326900
680.500250
50499.900000
100.623000
505.530000
max
103.380000
5.989000
3.382000
169.672000
1665.990000
50499.900000
102.902000
4978.160000
Calculations are easy in a dataframe. As a simple example, let's convert conductivity to resistivity:
In [8]:
df['RES'] = 1000 / df.COND
In [9]:
df[100:100.5]
Out[9]:
CALI
DFAR
DNEAR
GAMN
NEUT
PR
SP
COND
RES
DEPT
100.00
101.546
1.955
1.876
127.8290
237.997
2655.37
92.957
318.800
3.136763
100.05
101.540
1.988
1.919
90.6593
237.000
2662.04
92.926
311.391
3.211397
100.10
101.516
1.986
1.911
83.6761
243.999
2651.62
92.926
306.697
3.260547
100.15
101.504
2.010
1.904
109.2380
237.001
2660.50
92.938
301.263
3.319359
100.20
101.474
1.993
1.897
92.9720
191.000
2657.42
92.969
297.804
3.357913
100.25
101.408
2.013
1.909
88.3237
240.992
2656.74
92.953
298.051
3.355130
100.30
101.438
2.033
1.874
125.5010
218.007
2658.62
92.957
298.792
3.346810
100.35
101.486
1.965
1.908
90.6533
244.996
2663.92
92.975
304.966
3.279054
100.40
101.528
2.039
1.938
95.2953
207.006
2666.49
92.984
311.141
3.213977
100.45
101.564
2.021
1.947
74.3780
189.000
2665.46
93.005
318.305
3.141641
100.50
101.600
2.027
1.948
72.0534
199.998
2664.09
93.011
328.430
3.044789
Convert the depth index to feet:
In [10]:
df.index = df.index / 0.3048
Note that now the units of the indices used on the DataFrame are in feet, and it uses the nearest existing value:
In [11]:
df[441:446]
Out[11]:
CALI
DFAR
DNEAR
GAMN
NEUT
PR
SP
COND
RES
DEPT
441.108924
101.313
1.615
1.444
-2324.28
129.000
115.508
-3.049
608.777
1.642638
441.272966
101.301
1.577
1.383
-2324.28
171.000
115.508
-3.049
603.343
1.657432
441.437008
101.289
1.600
1.368
-2324.28
138.010
115.508
-3.049
594.948
1.680819
441.601050
101.037
1.555
1.395
-2324.28
165.991
115.508
-3.049
584.327
1.711371
441.765092
100.983
1.563
1.357
-2324.28
158.000
115.508
-3.049
578.643
1.728181
441.929134
100.833
1.570
1.357
NaN
NaN
NaN
NaN
571.233
1.750599
442.093176
93.760
1.582
1.378
NaN
NaN
NaN
NaN
565.552
1.768184
442.257218
88.086
1.561
1.361
NaN
NaN
NaN
NaN
570.490
1.752879
442.421260
86.443
1.516
1.338
NaN
NaN
NaN
NaN
574.937
1.739321
442.585302
79.617
5.989
1.356
NaN
NaN
NaN
NaN
579.137
1.726707
442.749344
65.236
4.587
1.397
NaN
NaN
NaN
NaN
NaN
NaN
442.913386
55.833
4.587
1.351
NaN
NaN
NaN
NaN
NaN
NaN
443.077428
49.061
4.587
1.329
NaN
NaN
NaN
NaN
NaN
NaN
443.241470
49.036
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
443.405512
49.024
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
443.569554
49.005
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
443.733596
48.999
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
443.897638
48.987
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
444.061680
48.980
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
444.225722
48.962
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
444.389764
48.962
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
444.553806
48.925
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
444.717848
48.931
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
444.881890
48.919
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
445.045932
48.900
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
445.209974
48.882
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
445.374016
48.863
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
445.538058
48.857
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
445.702100
48.839
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
445.866142
48.808
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
convert back to metres:
In [12]:
df.index *= 0.3048
and this time let's ask just for the last 10 samples in the file, using the iloc attribute
In [13]:
df.iloc[-10:]
Out[13]:
CALI
DFAR
DNEAR
GAMN
NEUT
PR
SP
COND
RES
DEPT
136.15
48.752
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.20
48.734
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.25
48.684
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.30
48.666
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.35
48.647
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.40
48.604
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.45
48.555
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.50
48.555
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.55
48.438
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
136.60
-56.275
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
In [18]:
df.loc[136.45]
Out[18]:
CALI 48.555
DFAR NaN
DNEAR NaN
GAMN NaN
NEUT NaN
PR NaN
SP NaN
COND NaN
RES NaN
Name: 136.45, dtype: float64
In [19]:
df.iloc[-4]
Out[19]:
CALI 48.555
DFAR NaN
DNEAR NaN
GAMN NaN
NEUT NaN
PR NaN
SP NaN
COND NaN
RES NaN
Name: 136.45, dtype: float64
In [ ]:
Content source: kinverarity1/lasio
Similar notebooks: